package GPSChallenge.obstaculo;

import Excepciones.NoConozcoAlVehiculoException;
import GPSChallenge.Representable;
import GPSChallenge.movimiento.ContadorDeMovimientos;
import GPSChallenge.movimiento.Posicion;
import GPSChallenge.vehiculo.Auto;
import GPSChallenge.vehiculo.Camioneta4x4;
import GPSChallenge.vehiculo.Moto;
import GPSChallenge.vehiculo.Vehiculo;

public class ControlPolicial extends Obstaculo{
	
	/*cada instancia de controlPolicial tiene un numeroAleatorio asignado.
	 * Este numero se hace con un random al crearse la clase; y va a determinar
	 * que tipo de vehiculos para y que tipo deja pasar*/
	private double numeroAleatorio = 0;
	private double probabilidadDePararAuto = 0.5;
	private double probabilidadDePararMoto = 0.8;
	private double probabilidadDeParar4x4 = 0.3;

	public ControlPolicial(){

		this.numeroAleatorio = Math.random();
	}
	
	public double obtenerNumeroAleatorio() {
		
		return numeroAleatorio;
	}
	
	public double obtenerProbabilidadDePararAuto() {
		
		return probabilidadDePararAuto;
	}
	
	public double obtenerProbabilidadDePararMoto() {
		
		return probabilidadDePararMoto;
	}
	
	public double obtenerProbabilidadDeParar4x4() {
		
		return probabilidadDeParar4x4;
	}

	public void interceptarA(Auto auto, Vehiculo vehiculo) throws NoConozcoAlVehiculoException {
		
		ContadorDeMovimientos unContadorDeMovimientos = ContadorDeMovimientos.obtenerInstancia();
		
		if(numeroAleatorio <= probabilidadDePararAuto)
			
			unContadorDeMovimientos.sumarMovimientos(3);
		
	}

	public void interceptarA(Camioneta4x4 camioneta4x4, Vehiculo vehiculo) throws NoConozcoAlVehiculoException {
		
		ContadorDeMovimientos unContadorDeMovimientos = ContadorDeMovimientos.obtenerInstancia();
		
		if(numeroAleatorio <= probabilidadDeParar4x4)
			
			unContadorDeMovimientos.sumarMovimientos(3);
	}
	
    public void interceptarA(Moto moto, Vehiculo vehiculo) throws NoConozcoAlVehiculoException {
		
    	ContadorDeMovimientos unContadorDeMovimientos = ContadorDeMovimientos.obtenerInstancia();
		
		if(numeroAleatorio <= probabilidadDePararMoto)
			
			unContadorDeMovimientos.sumarMovimientos(3);
	}

	@Override
	public void representar(Representable visionObstaculo,Posicion posCalle) {
			
		visionObstaculo.representar(this, posCalle);
		
	}

	

}
